package com.itheima.io.outputstream.demo01;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * 使用OutputStream一次写一个字节
 * public abstract void write(int b)一次写一个字节数据
 */
public class OutputStreamDemo01 {

    public static void main(String[] args) throws IOException {

        /**
         * 创建OutputStream的对象，OutputStream是字节输出流中的顶层父类，是一个抽象类。那么既然是一个抽象类，那么我们不能直接
         * 去通过new关键字去创建对象。那么我们要使用OutputStream就需要以多态的方式创建对象；那么要使用多态的方式去创建对象，那么
         * 就需要去选定一个OutputStream的子类，那么我们应该选择哪一个？我们选定的是FileOutputStream
         * 那么创建FileOutputStream对象，那么我们就需要借助于FileOutputStream的构造方法
         * FileOutputStream​(String name)： name参数表示的就是文件名路径
         */
        OutputStream outputStream = new FileOutputStream("itheima-io-outputstream\\a.txt");

        /**
         * 上面这段代码做了什么事情?
         * 1. 调用系统的功能去创建了a.txt
         * 2. 创建OutputStream对象
         * 3. 把这个OutputStream指向了这个文件
         */

        // public abstract void write(int b)一次写一个字节数据
        /**
         * 我们在写数据的时候，在计算机上存储的是97所对应的二进制数据，当我们使用指定的软件将这个文件打开的时候，软件会将这个二进制
         * 数据转换为对应的字符
         */
        outputStream.write(97);

        // IO流使用完毕以后流需要进行关闭操作
        /**
         * 为什么要进行关闭操作? 我们刚才创建了一个a.txt文件，这个a.txt文件的创建调用的系统功能进行创建的，那么肯定需要占用系统资源
         * 当我们操作完毕以后，有没有通知系统去释放关于创建这个文件所占用的资源呢？没有，那么这样的话这个资源就没有释放
         * 那么其他程序就没有办法去及时使用这一部分的资源。造成了资源浪费(内存泄漏)
         *
         * IO流使用完毕以后需要进行关闭操作，关闭操作其实就是通知系统释放关于本次操作所占用的系统资源
         */
        outputStream.close();

    }

}
